/**
 * 构建我的第一个JavaScript框架,类似jQuery框架
 * @author jurnlee
 */
/* window.dome =  = $$ = dome = //如果内部定义了此处就不需要定义了 */

(function() { //其实需要传入两个参数window,undifined
	//定义局部变量
	var
		window = this,
		//在 自调用匿名函数的作用域内，确保undefined是真的未定义。因为undefined在非火狐浏览器中是能够被重写，赋予新的值
		undifined,
		//临时存放两个变量，在使用释放函数如noConfilict()后还可还原
		_dome = window.dome,
		_$$ = window.$$,
		dome = window.dome = window.$$ = function() { //构造函数
			return new dome.fn.init();
		}

	//扩展原型对象，同时也实现继承，并传递原型的别名
	dome.fn = dome.prototype = {
		version: "v1.0",
		constructor: dome,
		init: function(selector, context) {
			alert("-------init-------");
			return this;
		},
		isFunction:function(obj){
			return (typeof obj ==="function");
		},
		popup1: function() {
			alert(" popup1 ");
			return this;
		},
		popup2: function() {
				alert(" popup2! ");
				return this;
		}
			//......

	};
	//对上面定义的init函数重置原型,当return new dome.fn.init();时候必须有这句
	dome.fn.init.prototype = dome.fn;
	//......



	//实现对dome原型扩充
	//先定义功能扩展函数  // jQuery.extend( [ deep ], target, object1, [ objectN ] )
	dome.extend = dome.fn.extend = function() {
		/*for (var index in obj) {
		     this[index] = obj[index];
		 }
		 return this;
		 */
		var options, name, src, copy, copyIsArray, clone,
			target = arguments[0] || {}, //arguments[0]是插件Object {}
			i = 1,
			length = arguments.length,
			deep = false;
		//如果第一个参数是boolean值，可能是深度拷贝
		if (typeof target === "boolean") {
			deep = target;
			target = arguments[1] || {};
			i = 2;
alert("if isboolean");
		}
		//target不是对象也不是函数，则强制转换设置成空对象
		if (typeof target !== "object"&&!(typeof target ==="function")) {  //dome.isFunction
			target={};
		}
		//如果只是传入一个参数，则认为是扩展
		if(length ===i){
			target = this; //构造函数 return new dome.fn.init()
			--i;
		}
		for(;i<length;i++){
			//只处理非空参数
			if(arguments[i]!=null){
				options = arguments[i];
				for(name in options){
					//src = target[name];
					target[name] = options[name];
alert(arguments.length+" "+typeof options[name]+"  "+ target);
					//避免循环引用
					if(target===copy){
						continue;
					}
					//深度拷贝，并且如果值是纯数组或对象，则递归
					/*if(deep&&copy&&(dome.isPlainObject(copy)||(copyIsArray=dome.isArray(copy)))){
						if(copyIsArray){
							copyIsArray=false;
							clone=src&&dome.isPlainObject(src)?src:{};
						}else if(copy!==undifined){
							target[name]=copy;
						}
					}*/
				}//end for
			}//end if(options)
		}
		return target;  //返回更改后的对象
	};

	//返回局部变量dome，其实是return new dome.fn.init();
	return dome;
})(window);
//传入window，使window由全局变量变为局部变量，当jQuery代码块中访问window时，不需将作用域链回退到顶层作用域，这样可更快访问window;更重要的是，将window作为参数传入，可以在压缩代码时进行优化，看看jquery-1.6.1.min.js：(function(a,b){})(window); // window 被优化为 a

//扩展对象方法，插件的写法
/*dome.extend({

});*/